/*!
 * \file WtRiskMonFact.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 *
 * \brief 风控监控器工厂类定义文件
 *		  本文件定义了WtRiskMonFact风控监控器工厂类，负责创建和管理各种风控监控器实例
 *		  实现了IRiskMonitorFact接口，提供风控监控器的统一创建和销毁机制
 *		  支持插件化的风控监控器扩展，为交易系统提供灵活的风控管理能力
 */
#pragma once
#include "../Includes/RiskMonDefs.h"

USING_NS_WTP;

/**
 * @class WtRiskMonFact
 * @brief 风控监控器工厂类
 * @details 风控监控器工厂类，实现IRiskMonitorFact接口
 *          负责创建、枚举和销毁各种类型的风控监控器
 *          采用工厂模式设计，支持插件化的风控监控器扩展
 *          为交易系统提供统一的风控监控器管理接口
 */
class WtRiskMonFact : public IRiskMonitorFact
{
public:
	/**
	 * @brief 构造函数
	 * @details 初始化风控监控器工厂实例
	 */
	WtRiskMonFact();
	
	/**
	 * @brief 析构函数
	 * @details 清理风控监控器工厂资源
	 */
	virtual ~WtRiskMonFact();

public:
	/**
	 * @brief 获取工厂名称
	 * @return 返回工厂名称字符串
	 * @details 返回当前风控监控器工厂的标识名称
	 *          用于工厂识别和日志记录
	 */
	virtual const char* getName() override;
	
	/**
	 * @brief 枚举可用的风控监控器
	 * @param cb 枚举回调函数
	 * @details 遍历并通过回调函数返回所有可用的风控监控器类型
	 *          回调函数会接收工厂名称、监控器名称和是否可用等信息
	 */
	virtual void enumRiskMonitors(FuncEnumRiskMonCallback cb) override;

	/**
	 * @brief 创建风控监控器实例
	 * @param name 监控器名称
	 * @return 返回创建的风控监控器指针，失败返回NULL
	 * @details 根据指定名称创建对应的风控监控器实例
	 *          支持的监控器类型包括SimpleRiskMon等
	 *          创建的实例需要通过deleteRiskMonotor方法销毁
	 */
	virtual WtRiskMonitor* createRiskMonotor(const char* name) override;

	/**
	 * @brief 销毁风控监控器实例
	 * @param unit 要销毁的风控监控器指针
	 * @return 成功返回true，失败返回false
	 * @details 安全销毁指定的风控监控器实例
	 *          会验证监控器是否属于当前工厂创建
	 *          确保内存正确释放，避免内存泄漏
	 */
	virtual bool deleteRiskMonotor(WtRiskMonitor* unit) override;

};

